package io.zhifei.modules.sys.system.dao.member;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.zhifei.modules.sys.system.entity.member.MemberEntity;
import io.zhifei.modules.sys.system.form.*;
import io.zhifei.modules.sys.system.form.member.MemberFileResult;
import io.zhifei.modules.sys.system.form.member.MemberParam;
import io.zhifei.modules.sys.system.form.member.MemberResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 学员信息 dao 接口
 * </p>
 *
 * @author duke
 * @since 2020-10-10
 */
@Mapper
public interface MemberDao extends BaseMapper<MemberEntity> {

    /**
     * 获取听课记录分页列表
     * @param page 分页参数
     * @param param 查询参数
     * @return
     */
    IPage<CourseRecordResult> getCourseRecordPageList(@Param("page") Page page, @Param("param") CourseRecordParam param);

    /**
     * 获取听课记录列表
     * @param param 查询参数
     * @return
     */
    List<CourseRecordResult> getCourseRecordList(@Param("param") CourseRecordParam param);

    /**
     * 更新听课记录的总次数
     * @param param
     */
    void updateCourseRecordNumber(@Param("param") CourseRecordParam param);

    /**
     * 获取听课记录详情
     * @param param
     * @return
     */
    CourseRecordResult getCourseRecordDetail(@Param("param") CourseRecordParam param);


    /**
     * 新增学员信息
     * @param param 学员信息
     */
    void addMember(@Param("param") MemberParam param);

    /**
     * 更新学员信息
     * @param param 学员信息
     */
    void updateMember(@Param("param") MemberParam param);

    /**
     * 查询学员信息分页列表
     * @param page 分页条件
     * @param param 查询条件
     * @return
     */
    IPage<MemberResult> getMemberPageList(@Param("page") Page page, @Param("param") MemberParam param);

    /**
     * 获取学员信息列表
     * @param param 查询信息
     * @return
     */
    List<MemberResult> getMemberList(@Param("param") MemberParam param);

    /**
     * 获取学员信息详情
     * @param param 查询条件
     * @return
     */
    MemberResult getMemberDetail(@Param("param") MemberParam param);

    /**
     * 获取用户听课记录分页列表
     * @param page 分页参数
     * @param userId 用户ID
     * @return
     */
    IPage<Map> getUserVideoRecordPageList(@Param("page") Page page,@Param("userId") String userId);


    /**
     * 新增用户视频记录
     * @param param
     */
    void addUserVideoRecord(@Param("param")UserVideoRecordParam param);

    /**
     * 新增单个用户课程
     * @param param 课程信息
     * @param userId 用户ID
     */
    void addUserCourse(@Param("param") UserCourseParam param);


    /**
     * 新增听课记录
     * @param param
     */
    void addVideoRecord(@Param("param") CourseRecordParam param);

    /**
     * 获取用户所有的单个课程
     * @param userId 用户ID
     * @return
     */
    List<Map<String,Object>> getSingleUserCourse(@Param("userId") Long userId);

    /**
     * 通过多个用户课程ID批量删除用户课程
     * @param ids 用户课程IDs
     */
    void deleteBatchUserCourse(@Param("ids") String[] ids);

    /**
     * 通过用户ID删除用户所有课程
     * @param userId 用户ID
     * @param classId 班级ID
     */
    void deleteUserCourseByUserId(@Param("userId") Long userId,@Param("classId") Long classId,@Param("courseId") Long courseId);

    /**
     * 获取学员档案分页列表
     * @param page 分页参数
     * @param param 查询参数
     * @return
     */
    IPage<MemberFileResult> getMemberFilePageList(@Param("page") Page page, @Param("param") MemberParam param);

    /**
     * 获取学员档案列表
     * @param param 查询参数
     * @return
     */
    List<MemberFileResult> getMemberFileList(@Param("param") MemberParam param);

}
